[英]selenium web driver element click not working in windows 10
[英]Click on element not working with Selenium
我正在嘗試單擊帶有 Selenium 的元素。 它是一個帶有 HTML 代碼的復選框,代碼如下:
包含復選框和條款的段落代碼:
<p class="jss72 jss80 jss927 jss943 jss930">
<span class="js122">
<img src="/images/purple.svg">
</span>
<span class="jss941">
I Agree To The Terms
</span>
</p>
我嘗試了三種不同的方法,但都沒有奏效:
//Tried with xpath clicking on image: Error: Element not interactable
driver.FindElement(By.XPath("//img[@src='/images/purple.svg']")).Click();
//Tried with Xpath by selecting the span
driver.FindElement(By.XPath("//span[@class='js122')]")).Click();
//Tried with CssSelector Error: Element not interactable
driver.FindElement(By.CssSelector("img[src*='purple.svg']")).Click();
請幫助解決任何其他問題。
ElementNotInteractableException 的發生是由於 Selenium 執行代碼和瀏覽器在頁面上執行 JavaScript 之間的競爭條件。 您要單擊的元素存在於天橋中。 我敢打賭,天橋出現時會出現淡入 animation。 有一個短暫的時刻,您可以明顯地看到復選框,並且 Selenium 可以在 DOM 中找到它,但 Selenium 無法單擊它。 解決方案非常簡單。 使用顯式等待:
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
// The 'd' parameter to the lambda expression is an IWebDriver object
wait.Until(d => d.FindElement(By.XPath("//img[@src='/images/purple.svg']")).Click());
在嘗試查找元素之前,您需要切換該框架或彈出窗口。
去做這個;
driver.switchTo().frame(<yourFrameIndex>);
或者
driver.switchTo().activeElement();
我在您分享的 html 中沒有看到復選框:
<p class="jss72 jss80 jss927 jss943 jss930">
<span class="js122">
<img src="/images/purple.svg">
</span>
<span class="jss941">
I Agree To The Terms
</span>
</p>
我希望看到類似的東西
<input type='checkbox'/>
而不是復選框旁邊的文本段落。
我在這里嘗試了所有答案,但沒有運氣。 我自己找到了解決方案。 我嘗試了 DOM 方法。
IWebElement we = driver.FindElement(By.CssSelector("img[src*='purple.svg']")); IJavaScriptExecutor js = (IJavaScriptExecutor)driver; js.ExecuteScript("arguments[0].click();", we);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.