element.click()
はSelenium
の両方を渡すため、Selenium
が初めてであり、Java
link
で要素がクリック可能かどうかを確認する必要があります。および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)
これに関するヘルプが必要です。
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()
はlink
とlabel
の両方を渡すと言っているので、要素がクリック可能ではないという意味ではないので、返される要素はclicked
ですが、イベントは要素をクリックしてアクションを実行します。
注:-最初にid
、name
、className
およびその他のロケーターで要素を見つけることを常にお勧めします。見つけるのが困難な場合は、cssSelector
を使用し、常にxpath
ロケーターに最後の優先順位を付けます。これは、他のロケーターよりも要素の検索が遅いためです。
それがあなたを助けることを願っています.. :)
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);
それが動作します。
wait.until(ExpectedConditions)
はnullを返さず、条件を満たすかTimeoutException
をスローします。
要素が表示され有効になっているかどうかを確認できます
WebElement element = driver.findElement(By.xpath);
if (element.isDisplayed() && element.isEnabled()) {
element.click();
}
ソースコードから、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;
}
};
}
List<WebElement> wb=driver.findElements(By.xpath(newXpath));
for(WebElement we: wb){
if(we.isDisplayed() && we.isEnabled())
{
we.click();
break;
}
}
}