测试人社区

selenium webdriver actionchains问题----复制操作定位不到指定元素

目的:学习webdriver下的actionchains复制粘贴写法,先不考虑实际情况

步骤:
1.进入百度注册页面
2.输入用户名,手机号,密码
3.复制手机号框中输入的手机号
4.在密码框中删除一个字符,添加一个新字符
5.在验证码框粘贴刚才复制的手机号
6.断言验证码框中字符是手机号前6位

期望:复制手机号框中的内容到验证码框
实际:没有全选复制手机号框中的内容,全选了密码框中的内容

问题:
不能全选到手机号框中的内容

代码如下

class Testweb1():
    def setup(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.driver.maximize_window()
    def teardown(self):
        self.driver.quit()
    def test_switchwindows(self):
        self.driver.get('https://www.baidu.com/')
        self.driver.find_element_by_xpath('//*[@id="u1"]/a').click()
        self.driver.find_element_by_xpath('//*[@id="passport-login-pop-dialog"]/div/div/div/div[3]/a').click()
        windows = self.driver.window_handles
        self.driver.switch_to.window(windows[1])
        action = ActionChains(self.driver)
        #输入用户名
        self.driver.find_element_by_name('userName').send_keys('4561')
        #输入手机号
        ele=self.driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_4__phone"]')
        ele.send_keys('19092778754')
        #复制手机号框中的值,这里试了click()也不行
        action.move_to_element(ele).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL)
        action.move_to_element(ele).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL)

        #输入密码框中的值
        oele=self.driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_4__password"]')
        oele.send_keys('li123456')
        action.move_to_element(oele)
        action.pause(1)
        # action.send_keys(Keys.NULL).pause(1)
        action.move_to_element(oele).send_keys(Keys.BACKSPACE).pause(1)
        action.move_to_element(oele).send_keys('7').pause(1)
        action.move_to_element(oele).send_keys(Keys.TAB).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL)
        action.perform()
       yanzheng=self.driver.find_element_by_id('TANGRAM__PSP_4__verifyCode')
 assert '190927' == yanzheng.get_attribute(value")
        # 关闭当前窗口,返回原来窗口
        # self.driver.close()
        time.sleep(6)
    # 复制手机号框中的值,这里试了click()也不行
    action.move_to_element(ele).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
    action.move_to_element(ele).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

这两句后面加上perform执行一下动作

沫沫老师,为什么需要单独加perform(),求教

ActionChains()方法最好直接调用

ActionChains(self.driver).move_to_element(oele).send_keys(Keys.BACKSPACE).pause(1)

因为ActionChains这个方法的动作添加是添加到一个list中,重复使用可能会出一些不可预知的问题