簡體   English   中英

單擊不適用於 Selenium 的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM