Selenium Webdriver——操作隐藏的元素

摘要:
有时我们会遇到一些不可见的元素。此时,硒不能对这些元素起作用。例如,在以下情况下,页面主要通过“display:none”控制整个下拉框的不可见性。此时,如果您直接操作此下拉框,将提示:from selenium。webdriver。支持selectimportSelectimportos,timedriver=webdriver。Chrome()file_path='file:///'+os.path.abspathdriver.getsel=driver.find_element_by_tag_nameSelect.select_by_Valuetime。梦游者。quit()异常。ElementNotVisibleException:消息:elementnotvisible:Elementisnotcurrentlyvisibleandynotberegulated我们需要通过javascript修改显示值。js='document.querySelectorAll[0].style.display=“block”;'driver.execute _ scriptsel=driver.find _ element_ by _ tag_ name select.select _ by _ value document.querySelectorAll[0].style.display=“block”;Document.querySelectorAll选择所有选定项目。[0]指定此组中的标记数。style.display=“块”;修改样式的display=“block”以指示其可见。执行此js代码后,可以正常操作下拉框。

有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些元素进行操作了。例如,下面的情况:

Selenium Webdriver——操作隐藏的元素第1张

页面主要通过“display:none”来控制整个下拉框不可见。这个时候如果直接操作这个下拉框,就会提示:

from selenium import webdriver
from selenium.webdriver.support.select import Select
import os,time

driver = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('test.html')
driver.get(file_path)

sel = driver.find_element_by_tag_name('select')
Select(sel).select_by_value('opel')
time.sleep(2)

driver.quit()

exceptions.ElementNotVisibleException: Message: element not visible: Element is not currently visible and may not be manipulated

我们需要通过javaScript修改display的值。

js = 'document.querySelectorAll("select")[0].style.display="block";'
driver.execute_script(js)

sel = driver.find_element_by_tag_name('select')
Select(sel).select_by_value('opel')

document.querySelectorAll("select")[0].style.display="block";

document.querySelectorAll("select")  选择所有的select。

[0] 指定这一组标签里的第几个。

style.display="block";  修改样式的display="block" ,表示可见。

执行完这句js代码后,就可以正常操作下拉框了。

Java代码

import java.io.File;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.By.ById;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.JavascriptExecutor;

public class SelectTest {

    public static void main(String[] args){
        
        WebDriver driver = new  ChromeDriver();
        File file = new File("C:/Users/fnngj/Desktop/test.html");
        String filePath = file.getAbsolutePath();
        driver.get(filePath);
        
         String js = "document.querySelectorAll('select')[0].style.display='block';";
        ((JavascriptExecutor)driver).executeScript(js);
        
        Select sel = new Select(driver.findElement(ById.xpath("//select")));
        sel.selectByValue("opel");
  
    }
}

免责声明:文章转载自《Selenium Webdriver——操作隐藏的元素》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇分位函数(四分位数)概念与pandas中的quantile函数WEB开发中的字符集和编码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle视图和PL SQL编程.

Oracle中的视图 在Oracle数据库中视图是数据库中特有的对象。视图主要用于数据查询,它不会存储数据(物化视图除外)。这是视图和数据表的重要区别。 视图的数据来源于一个或等多个表中的数据,可以利用视图进行查询、插入、更新和删除数据,操作视图就是间接操作数据库表。 通常情况下,视图主要用于查询,不提倡通过视图而更新与视图相关的表,因为视图中的数据只是一...

查询sql连接数

1.通过系统的“性能”来查看 开始->管理工具->性能(或者是运行里面输入 mmc)然后通过 添加计数器添加 SQL 的常用统计(MSSQL General Statistics) 然后在下面列出的项目里面选择 用户连接(User Connection) 就可以时时查询到sql server数据库连接数了。 2.通过系统表来查询: SELECT...

mysql--统计每个用户的累计访问次数

create table action(userId VARCHAR(10),visitDate VARCHAR(10),visitCount int ); insert into action values('u01','2017/1/21',5),('u02','2017/1/23',6),('u03','2017/1/22',8),('u04','2...

UI自动化的API总结

断言:assert 1 == 2unittest里的断言:assertEqual(title, u"百度一下,你就知道", "页面title属性值错误!")前进:driver.forward()后退:driver.back()刷新:driver.refresh()最大化:driver.maximize_window()获取坐标:driver.get_win...

SQL优化(转)

1. 负向条件查询不能使用索引     select * from order where status!=0 and stauts!=1     not in/not exists都不是好习惯     可以优化为in查询:     select * from order where status in(2,3)  2. 前导模糊查询不能使用索引    ...

[SQL SERVER] 跨服务器查询

[SQL SERVER] 跨服务器查询 方法一:用OPENDATASOURCE下面是个跨SQLServer查询的示例Select TableA.*,TableB.* From OPENDATASOURCE(         'SQLOLEDB',         'Data Source=ServerA;User ID=UserID;Password=P...