Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找元素selenium+;JAVA_Java_Performance_Selenium_Elements - Fatal编程技术网

查找元素selenium+;JAVA

查找元素selenium+;JAVA,java,performance,selenium,elements,Java,Performance,Selenium,Elements,在测试期间,我需要检查我的站点上是否有无效的工具提示和其他错误提示,以确保一切正常。问题是,硒元素似乎要花很长时间才能找到这些元素,而且它们是在计时器上设置的,所以它们有时有时间在硒元素找到它们之前清除,我们说的是3秒计时器 现在我发现他们是这样的: List<WebElement> error = driver.findElements(By.cssSelector("div.alert .error")); if (error.size() == 0)

在测试期间,我需要检查我的站点上是否有无效的工具提示和其他错误提示,以确保一切正常。问题是,硒元素似乎要花很长时间才能找到这些元素,而且它们是在计时器上设置的,所以它们有时有时间在硒元素找到它们之前清除,我们说的是3秒计时器

现在我发现他们是这样的:

      List<WebElement> error = driver.findElements(By.cssSelector("div.alert .error"));
        if (error.size() == 0) {return true;}
        else {return false;}
List error=driver.findElements(By.cssSelector(“div.alert.error”);
如果(error.size()==0){返回true;}
else{return false;}
这将找到在给定时间在站点上显示的所有错误消息,这有时很难跟上。工具提示是用javascript创建和销毁的,因此它们不会隐藏然后显示。有什么想法吗

编辑:

由于该网站是单页的,因此需要通过大量元素才能找到合适的网站,尽管当我查找一个实际可访问的项目时速度很快,因此为了最小化我的搜索,我做了如下操作:

WebElement messages = driver.findElement(By.id("the-div-the-message-is-created-in"));
List<WebElement> error = messages.findElements(By.cssSelector("div.alert .error"));
if (error.size() == 0) {return true;}
else {return false;}
WebElement messages=driver.findElement(By.id(“创建消息的div”);
列表错误=messages.findElements(By.cssSelector(“div.alert.error”);
如果(error.size()==0){返回true;}
else{return false;}

尽管它似乎没有更快地验证元素的存在。

我在我构建的每个框架中都加入了一些东西,这非常有效。。以下是从框架中找到的练习

在对对象执行任何操作之前,我实现了一种伪等待类型的方法。你自己试试看。它非常有效

这些是类中的方法

你自己把这些方法结合起来,你就可以走了

而且 就表现而言,我再怎么强调也不为过使用CSS。它更快,更干净。你自己看看吧

考虑以下几点:

<div id="something">
  <div class="someClass">
    <a href='http://google.com/search?'>Search Google</a>
  </div>
</div>
XPATH:

//div[@id='something']/div[contains(@class, 'someClass')]/a[starts-with(@href, 'http://google')]

我们在这里讨论的是多少个元素?一次不应该超过1或2个。这是一个很好的解决方案,但不要认为它会比我已经拥有的更快找到元素,在页面上找到元素需要花费很长时间的原因是它是一个页面,因此,所有内容都已加载,因此需要查看大量元素。然后,您的需求是不现实的,并且您不完全了解Selenium。这是在使用Selenium API的功能。。没有比这更快的办法了。如果你要花很长时间浏览一页代码,那么还有一些事情你不知道。我对selenium是新手,所以当然有些事情我并不完全了解selenium的工作原理,我所知道的是,当我使用示例中的代码时,项目不在那里,这需要很长的时间,但如果项目在那里,它会快很多。我不知道如果selenium没有找到某个元素,它是否会在DOM中多次尝试搜索该元素,但我的逻辑是,如果我在DOM的一小部分上进行搜索(如编辑所示),那么查看该元素是否存在所需的时间应该是相同的。请尝试此框架。。这是给初学者的硒,我想你会发现它非常好。我在生产企业环境中使用这种类型的框架。考虑这个开源版本<代码>;<代码>
div#something div.someClass > a[href^='http://google']
//div[@id='something']/div[contains(@class, 'someClass')]/a[starts-with(@href, 'http://google')]