我有一個方案來點擊疊加層上的'X'圖標。當我檢查使用selenium.isElementPresent(「// img [@ src ='close.jpg']」);它迴歸真實。但是當我執行selenium.click(「// img [contains(@ src,'close.jpg')]」);動作會引發異常「元素當前不可見,因此可能不會與」互動「。Selenium - isElementPresent返回true,但無法點擊元素
嘗試過所有類型的xpath,但無法解決問題。
我有一個方案來點擊疊加層上的'X'圖標。當我檢查使用selenium.isElementPresent(「// img [@ src ='close.jpg']」);它迴歸真實。但是當我執行selenium.click(「// img [contains(@ src,'close.jpg')]」);動作會引發異常「元素當前不可見,因此可能不會與」互動「。Selenium - isElementPresent返回true,但無法點擊元素
嘗試過所有類型的xpath,但無法解決問題。
首先是嘗試使用一些方法:
public boolean isElementPresent(By selector)
{
return driver.findElements(selector).size()>0;
}
public boolean isElementVisible(By selector){
return driver.findElement(selector).isDisplayed();
}
那麼如果你的頁面不使用一些等待機制compeltely呈現嘗試:
Thread.sleep(1000);
driver.manage().timeouts().implicitlyWait(2,TimeUnit.SECONDS);
和fluentWait機制: 。
public WebElement fluentWait(final By locator){
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(org.openqa.selenium.NoSuchElementException.class);
WebElement foo = wait.until(
new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
}
);
return foo; } ;
fluentWait(By.xpath(..blablabla...)).click();
,您還可以jsCode注射: 1)如果jQuery的支持
String cssSelector="blablabla";
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("var x = $(\'"+cssSelector+"\');");
stringBuilder.append("x.click();");
js.executeScript(stringBuilder.toString());
2)通過DOM模型中定位所需元件: 例如
String js="document.getElementsByTagName('div')[34].click();"
jsCodeExecution(js);
public void jsCodeExecution(String jsCode){
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(jsCode);
js.executeScript(stringBuilder.toString());
}
嘗試一步一步調試,以確切地看到問題出在哪裏。 希望它可以幫助你。
此外,我建議您先驗證發現CSS選擇器和XPath的firepath驗證(插件到Firefox中的Firebug):
感謝您的解決方案。 使用jQuery解決方案我能夠解決問題,但還有一個問題是cssSelector值是動態的。我在這種情況下嘗試使用xpath,但沒有用,只是提到沒有顯示錯誤消息。請讓我知道,如果我們可以處理動態的CSS。 – deactivate
好。你能澄清你提到的cssSelector值是動態的嗎? 據我可以看到你的問題 - 你的元素的CSS選擇器是String cssSelector =「img [src ='close.jpg']」,這個css選擇器嚴格定義你的web元素。 –
顯示你的HTML代碼? –
您正在使用哪種瀏覽器。我知道這個問題從IE瀏覽器。它在Firefox中運行嗎? –
我正面臨着Firefox中的問題。 – deactivate