web-dev-qa-db-ja.com

Seleniumで要素がクリック可能かどうかを確認しますJava

element.click()Seleniumの両方を渡すため、Seleniumが初めてであり、Javalinkで要素がクリック可能かどうかを確認する必要があります。およびlabel

私は以下のコードを使用しようとしましたが、動作しませんでした:

WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10);

if(wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")))==null)

これに関するヘルプが必要です。

10

elementToBeClickable は、要素が表示され、クリックできるように有効になっていることを確認するために使用されます。

_ExpectedConditions.elementToBeClickable_は WebElement を返します。予想される条件が真の場合、そうでない場合はスローされます TimeoutException 、決してnullを返しません。

_ExpectedConditions.elementToBeClickable_を使用して常にクリック可能な要素を提供するである要素を見つけるために、null条件を確認する必要がない場合は、以下のようにしてください:-

_WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")));
element.click();
_

element.click()linklabelの両方を渡すと言っているので、要素がクリック可能ではないという意味ではないので、返される要素はclickedですが、イベントは要素をクリックしてアクションを実行します。

:-最初にidnameclassNameおよびその他のロケーターで要素を見つけることを常にお勧めします。見つけるのが困難な場合は、cssSelectorを使用し、常にxpathロケーターに最後の優先順位を付けます。これは、他のロケーターよりも要素の検索が遅いためです。

それがあなたを助けることを願っています.. :)

14
Saurabh Gaur

element.isDisplayed() && element.isEnabled()trueを返す場合もありますが、要素はnotをクリック可能です。これは、他の要素によって非表示/オーバーラップしているためです。

このような場合、キャッチされるExceptionは次のとおりです。

org.openqa.Selenium.WebDriverException:不明なエラー:要素はポイント(781、704)でクリックできません。他の要素はクリックを受け取ります:<div class="footer">...</div>

代わりに次のコードを使用してください。

WebElement  element=driver.findElement(By.xpath"");  
JavascriptExecutor ex=(JavascriptExecutor)driver;
ex.executeScript("arguments[0].click()", element);

それが動作します。

11
user8639449

wait.until(ExpectedConditions)はnullを返さず、条件を満たすかTimeoutExceptionをスローします。

要素が表示され有効になっているかどうかを確認できます

WebElement element = driver.findElement(By.xpath);
if (element.isDisplayed() && element.isEnabled()) {
    element.click();
}
4
Guy

ソースコードから、ExpectedConditions.elementToBeClickable()を見ることができるようになり、要素が表示され有効になっていると判断されるので、isEnabled()isDisplayed()と一緒に使用できます。以下はソースコードです。

public static ExpectedCondition<WebElement> elementToBeClickable(final WebElement element) {
                return new ExpectedCondition() {
                        public WebElement apply(WebDriver driver) {
                                WebElement visibleElement = (WebElement) ExpectedConditions.visibilityOf(element).apply(driver);

                                try {
                                        return visibleElement != null && visibleElement.isEnabled() ? visibleElement : null;
                                } catch (StaleElementReferenceException arg3) {
                                        return null;
                                }
                        }

                        public String toString() {
                                return "element to be clickable: " + element;
                        }
                };
        }
1
Leo Zhao
List<WebElement> wb=driver.findElements(By.xpath(newXpath));
        for(WebElement we: wb){
            if(we.isDisplayed() && we.isEnabled())
            {
                we.click();
                break;
            }
        }
    }