Evet Selenium'u kullanırken bu sorunla birçok kez karşılaştım. Bu problemin etrafında çalıştığım 2 yol var. Öncelikle kapalı bekleme süresini değiştirebilirsiniz. denir noktada "lala" sınıfıyla eşleştirmek için bulunamadı hiçbir öğe yoksa, bu kod bir istisna durumu
Actions builder = new Actions(driver);
builder.click(driver.findElement(By.className("lala"))).perform();
: Örneğin bu kod parçası verilir. Sen bu örtük bekleme süresini değiştirebilirsiniz:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
Bu 5 saniye yerine hemen başarısız olduğu için sürücü anket yapar. Eğer eleman 5 saniye sonra hala yerleştirilemiyorsa, eylem başarısız olur. Tabii ki bu ayarı değiştirebilirsiniz. Bu yöntemin çoğu zaman iyi çalıştığını gördüm. Çoğu zaman tüm sayfa yüklemesini önemsemiyorsunuz, sadece belirli bir bölüm.
public static void waitAndClick(WebDriver driver, By by, String text) {
WebDriverWait wait = new WebDriverWait(driver, 10000);
Function<WebDriver, Boolean> waitForElement = new waitForElement(by);
wait.until(waitForElement);
for(WebElement e : driver.findElements(by)) {
if(e.getText().equals(text)) {
Actions builder = new Actions(driver);
builder.click(e).perform();
return;
}
}
}
Ve: o da ince istediğini detaylandırılması izin de içeren metni denetler hariç
Ben de bir eleman üzerinde örtülü bekleme ile aynı yapacak GetElementByClassAndText olan başka bir fonksiyon yazdım kullandığı İşlevini tekabül:
public class waitForElement implements Function<WebDriver, Boolean> {
private final By by;
private String text = null;
public waitForElement(By by) {
this.by = by;
}
public waitForElement(By by, String text) {
this.by = by;
this.text = text;
}
@Override
public Boolean apply(WebDriver from) {
if(this.text != null) {
for(WebElement e : from.findElements(this.by)) {
if(e.getText().equals(this.text)) {
return Boolean.TRUE;
}
}
return Boolean.FALSE;
} else {
try {
from.findElement(this.by);
} catch(Exception e) {
return Boolean.FALSE;
}
return Boolean.TRUE;
}
}
}
sana Ruby selenyum kullanarak ama umarım kodumu bazıları (en azından kavramsal olarak) yediğinin farkına transfer ve size yardımcı olur.
Değeri nasıl izlediğiniz hakkında biraz daha ayrıntılı bilgi verebilir misiniz? – emery
Lütfen detaylandırır mısınız? –