當前位置:首頁 » 編程語言 » 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的結合是一種可以完成這個目標的方式。

隱含等待,其實就相當於設置全局的等待,在定位元素時,對所有元素設置超時時間。
一般來說,我們使用顯式等待。

熱點內容
安卓由哪個公司提供 發布:2024-04-30 12:27:03 瀏覽:414
伺服器2個cpu的內存如何安裝 發布:2024-04-30 12:19:02 瀏覽:326
如何搭建outlook伺服器 發布:2024-04-30 10:46:50 瀏覽:635
美圖忘記密碼手機如何刷機 發布:2024-04-30 10:45:43 瀏覽:190
sql字元設置 發布:2024-04-30 10:39:03 瀏覽:305
androidram 發布:2024-04-30 10:36:06 瀏覽:280
購買的新車有哪些基本配置 發布:2024-04-30 10:27:32 瀏覽:324
遠程訪問攝像頭 發布:2024-04-30 10:10:57 瀏覽:72
貼吧網站源碼 發布:2024-04-30 10:10:42 瀏覽:251
飢荒為什麼伺服器模組不能用 發布:2024-04-30 10:10:41 瀏覽:551