当前位置:首页 » 编程语言 » pythonselenium等待元素

pythonselenium等待元素

发布时间: 2022-07-12 16:48:11

A. python+selenium中加隐式等待定位不到元素但是加sleep可以,是什么原因

页面跳转太快,定位不到元素,time.sleep()可以等待定位到元素

B. python selenium等待问题

没有元素会停100秒。
会在找到元素后停止等待,进行下一步操作。

C. selenium 里面的显性和隐性等待时间,都是在浏览器加载完毕后开始计时吗

1、从上一条get请求发送开始,就开始轮询查找并计时,显性等待只考虑两个因素,一个是查找频率,另一个就是所查找的元素有没有出现;2、隐形等待面对的是全部代码,设置的是最多等待时间,如果搭配显性等待,则相互影响,时间按照最长的来判定,如果不搭配显性等待,则那行代码默认无等待进行。

D. Selenium显示等待和隐式等待的区别

1.selenium的显示等待

原理:显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.(简而言之:就是直到元素出现才去操作,如果超时则报异常)

2.selenium的隐式等待

原理:隐式等待,就是在创建driver时,为浏览器对象设置一个等待时间。这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。

注意:在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内不断的刷新页面去寻找我们需要的元素

3.笨方法等待

使当前线程进入等待,Thread.sleep();这种等待属于死等,很容易让线程挂掉,使程序抛异常,所以我们要慎用此方法。

E. python+selenium 在执行测试脚本时,遇到错误如何能继续执行下去而不停止

(1)遇到错误继续执行需要做好异常处理就好了
(2)定位元素有时成功有时失败,可能由于网络不稳定,元素没有加载出来,脚本就去找这个元素,那肯定会失败的,你可以试下用显示等待,等页面全部加载出来后,再进行定位元素操作

F. 怎么等待页面元素加载完成

在selenium-webdriver中我们用两种方式进行等待:明确的等待和隐性的等待。

明确的等待

明确的等待是指在代码进行下一步操作之前等待某一个条件的发生。最不好的情况是使用Thread.sleep()去设置一段确认的时间去等待。但为什么说最不好呢?因为一个元素的加载时间有长有短,你在设置sleep的时间之前要自己把握长短,太短容易超时,太长浪费时间。selenium webdriver提供了一些方法帮助我们等待正好需要等待的时间。利用WebDriverWait类和ExpectedCondition接口就能实现这一点。

下面的html代码实现了这样的一种效果:点击click按钮5秒钟后,页面上会出现一个红色的div块。我们需要写一段自动化脚本去捕获这个出现的div,然后高亮之。

Wait.html

<html>
<head>
<title>Set Timeout</title>
<style>
.red_box {background-color: red; width = 20%; height: 100px; border: none;}
</style>
<script>
function show_div(){
setTimeout("create_div()", 5000);
}

function create_div(){
d = document.createElement('div');
d.className = "red_box";
document.body.appendChild(d);
}
</script>
</head>
<body>
<button id = "b" nclick = "show_div()">click</button>
</body>
</html>

下面的代码实现了高亮动态生成的div块的功能:

import org.openqa.selenium.By;
import org.openqa.selenium.javascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class WaitForSomthing {

/**
* @author gongjf
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
WebDriver dr = new FirefoxDriver();
String url = "file:///C:/Documents and Settings/gongjf/桌面/selenium_test/Wait.html";// "/Your/Path/to/Wait.html"
dr.get(url);
WebDriverWait wait = new WebDriverWait(dr,10);
wait.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("b"));
}}).click();

WebElement element = dr.findElement(By.cssSelector(".red_box"));
((JavascriptExecutor)dr).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);

}
}

上面的代码WebDriverWait类的构造方法接受了一个WebDriver对象和一个等待最长时间(10秒)。然后调用until方法,其中重写了ExpectedCondition接口中的apply方法,让其返回一个WebElement,即加载完成的元素,然后点击。默认情况下,WebDriverWait每500毫秒调用一次ExpectedCondition,直到有成功的返回,当然如果超过设定的值还没有成功的返回,将抛出异常。

隐性等待

隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间。默认值是0,但是设置之后,这个时间将在WebDriver对象实例整个生命周期都起作用。上面的代码就变成了这样:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class WaitForSomthing {

/**
* @author gongjf
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
WebDriver dr = new FirefoxDriver();

//设置10秒
dr.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

String url = "file:///C:/Documents and Settings/gongjf/桌面/selenium_test/Wait.html";// "/Your/Path/to/Wait.html"
dr.get(url);
//注释掉原来的
/*WebDriverWait wait = new WebDriverWait(dr,10);
wait.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("b"));
}}).click();*/
dr.findElement(By.id("b")).click();
WebElement element = dr.findElement(By.cssSelector(".red_box"));
((JavascriptExecutor)dr).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);

}
}

两者选其一,第二种看起来一劳永逸呀。哈哈

G. python下使用selenium怎么才能控制浏览器加载某个元素

/**
*等待元素能被点击
*/
@Override
(Stringtype,Stringpath,intnum,inttimeout){
WebDriverWaitwait=newWebDriverWait(driver,timeout);

wait.until(ExpectedConditions.elementToBeClickable(getElementsBy(type,path).get(num)));
}

H. selenium 显示等待和隐式等待哪个更好

显式等待是,先于代码的继续执行,而定义的等待某个条件发生的代码。最糟糕的情况是Thread.sleep(),设置条件为一个需要等待的精确时间段。有一些提供的便利方法,可以帮助你编写代码仅仅等待需要的时间。WebDriverWait与ExpectedCondition的结合是一种可以完成这个目标的方式。

隐含等待,其实就相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。
一般来说,我们使用显式等待。

热点内容
java的发展 发布:2024-05-17 23:34:36 浏览:3
高并发上传 发布:2024-05-17 23:00:40 浏览:422
我的世界斗罗大陆服务器网易手机 发布:2024-05-17 22:45:11 浏览:66
ideajar源码 发布:2024-05-17 22:40:30 浏览:786
易语言取名源码 发布:2024-05-17 22:40:12 浏览:646
存储巴士x250 发布:2024-05-17 22:21:30 浏览:569
别墅中央空调地暖如何配置最好 发布:2024-05-17 22:20:09 浏览:930
php安装mbstring 发布:2024-05-17 22:09:56 浏览:471
单向板中配置哪些钢筋 发布:2024-05-17 22:09:16 浏览:798
winftp下载 发布:2024-05-17 21:51:33 浏览:694