#selenium切换窗口_悬停

#切换窗口_悬停
##python
输入框被readonly只读,该处被写成选择内容填入。点击时出现弹窗,弹窗中包含选项,直接定位点击无法做到,发现元素中写了新window,于是判断可能要切换窗口,遂采取两种方案:方案一:切入弹出窗口取出需要的文本值,再切回主窗口,去掉readonly后填入取出的文本值;方案二:切入弹出窗口,悬停(之所以悬停,是怀疑不能直接点击)后进行点击所需选项,切回主窗口为主窗口下步元素定位作准备

#方案一:获取文本值,直接输入
# 获得打开的第一个窗口句柄
window_1 = driver.current_window_handle
#点击搜索按钮
driver.find_element_by_xpath('//input[@type="text"]/parent::div/a')[14].click()  
time.sleep(2)
# 获取打开的多个窗口句柄
windows = driver.window_handles
# 切换到当前最新打开的窗口
driver.switch_to.window(windows[-1])
time.sleep(0.5)
#获取文本内容
we = driver.find_element_by_xpath('(.//*[normalize-space(text()) and normalize-space(.)='公司单选'])[1]/following::label[1]'))
bodyStr = we.text()
time.sleep(1)
//返回父窗口
for current_window in windows:
  if current_window = window_1:
     driver.switch_to.window(current_window)
#去掉readonly
El = driver.find_element_by_xpath('//input[@type="text"]/parent::div')
time.sleep(2)
driver.execute_script('aegument[0].removeAttribute(\"readonly\")',El)
time.sleep(2)
#输入文本内容
driver.find_element_by_xpath('//input[@type="text"]/parent::div]').send_keys(bodyStr)
time.sleep(2)

#方案二:
python
# 获得打开的第一个窗口句柄
window_1 = driver.current_window_handle
#点击搜索按钮
driver.find_element_by_xpath('//input[@type="text"]/parent::div/a')[14].click()  
# 获取打开的多个窗口句柄
windows = driver.window_handles
# 切换到当前最新打开的窗口
driver.switch_to.window(windows[-1])
time.sleep(2)
#pyhon悬停
chain = ActionChains(driver)
implement = driver.find_element_by_xpath('(.//*[normalize-space(text()) and normalize-space(.)='公司单选'])[1]/following::label[1]')
chain.move_to_element(implement).perform()
time.sleep(0.5)
 //点击选择
driver.find_element_by_xpath('(.//*[normalize-space(text()) and normalize-space(.)='公司单选'])[1]/following::label[1]')).click();
time.sleep(0.5)
//返回父窗口
for current_window in windows:
  if current_window = window_1:
     driver.switch_to.window(current_window)

##java

       String parentWindowId = driver.getWindowHandle();   //获取父窗口句柄
       Set<String> allWindowsId = driver.getWindowHandles();//将父窗口id赋值给变量
        //点击操作,打开弹窗
       driver.findElement(By.xpath()).click();  
        // 获取所有的打开窗口的句柄
       for (String windowId : allWindowsId) {
            if (driver.switchTo().window(windowId).getTitle().contains("弹窗标题")) {
                driver.switchTo().window(windowId);
                Thread.sleep(2000);
                //悬停2秒
                Actions action =new Action(driver);
                action.clickAndHold(driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='公司单选'])[1]/following::label[1]"))).perform();
                Thread.sleep(2000);
                //点击选择
                driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='公司单选'])[1]/following::label[1]")).click();           
            }
       }
        // 再次切换回原来的父窗口
       driver.switchTo().window(parentWindowId)



       //关闭弹窗
       Set<String> allWindowsId = driver.getWindowHandles();        
       // 获取所有的打开窗口的句柄
       for (String windowId : allWindowsId) {
            if (driver.switchTo().window(windowId).getTitle().contains("弹窗标题")) {
                driver.switchTo().window(windowId);

                break;
            }
       }

猜你喜欢

转载自blog.csdn.net/qq_39219307/article/details/102970048