私はmd-sidenavでWebページを持っており、セレンでテストしようとしています。私がページ上でやっていることは、md-sidenavの中の要素をクリックしようとするときを除いてすべて機能します。 driver.findElement(By.name( "elementName")またはidでmd-sidenav内のWeb要素にアクセスする場合、要素がnullではないことがわかります)また、anにアクセスすると、要素しかし、私はそれらをクリックしようとすると、それは私にElementNotVisibleExceptionを与える:。ここでは要素セレンはmd-sidenavの中をクリック
をクリックすることはできませんが、HTMLです:
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
public class EcsTest {
static WebDriver driver;
static Wait<WebDriver> wait;
static String prevText = "";
static String currText = "";
public static void main(String[] args) {
System.setProperty("webdriver.ie.driver","C:\\Dvp\\Irs\\EcsTest\\IEDriverServer.exe");
driver = new InternetExplorerDriver();
wait = new WebDriverWait(driver, 30);
driver.get("http://localhost:8080/ecs/index.html");
try {
driver.findElement(By.id("element1")).click();
wait.until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver webDriver) {
currText = webDriver.findElement(By.id("field1")).getText();
return !prevText.equals(currText);
}
});
prevText = currText;
driver.findElement(By.id("element2")).click();
//driver.findElement(By.name("dispositionSelect")).sendKeys("Add to Scheme");
Select selectElement = new Select(driver.findElement(By.name("selectElement1")));
disposition.selectByVisibleText("Some form");
WebElement sideNav = driver.findElement(By.id("sideNavRight"));
WebElement closeBtn = sideNav.findElement(By.id("navClose"));
/*
This prints out:
sideNav is not null!, closeBtn is not null!, not displayed!, enabled!
*/
System.out.println(
"sideNav is " + ((sideNav == null) ? "null!" : "not null!") +
", closeBtn is " + ((closeBtn == null) ? "null!" : "not null!") +
", " + ((closeBtn.isDisplayed()) ? "displayed!" : "not displayed!") +
", " + ((closeBtn.isEnabled()) ? "enabled!" : "not enabled!"));
WebElement select = sideNav.findElement(By.name("category"));
List<WebElement> options = select.findElements(By.tagName("md-option"));
/*
This prints out:
select: category, visible: false
*/
System.out.println(
"select: " + select.getAttribute("name") + ", visible: " + select.isDisplayed());
/*
This crashes:
ElementNotVisibleException: Cannot click on element
Without this click, I can see the options fine but the option click crashes
*/
select.click();
for(WebElement option : options) {
System.out.println("option: " + option.getAttribute("value"));
if(option.getAttribute("value").equals(optionName)) {
option.click();
System.out.println("option: " + option.getAttribute("value") + " clicked!");
break;
}
}
} catch (Exception exp) {
exp.printStackTrace();
}
finally {
driver.close();
}
}
}
:
<body ng-controller='MyController as my' ng-cloak>
<section layout="row" column>
<md-sidenav id="sideNavRight" class="md-sidenav-right" md-component-id="right" ng-init="my.selectTab(1)">
<div ng-controller="MyController" ng-show="my.isSelected(1)">
<md-toolbar class="md-theme-light">
<h1 class="md-toolbar-tools">Some Form</small>
<md-button id="navClose" ng-click="close()" class="closeIcon" aria-label="Close">
<md-icon md-svg-icon="assets/img/ic_close_white_24px.svg"></md-icon><sr-only>Close</sr-only>
</md-button></h1>
</md-toolbar>
<md-content>
<div layout="column" index="0">
<h3>Some Information</h3> <br />
<form name="myForm">
<div layout="row" layout-align="start" flex="100">
<md-input-container flex="">
<label>Category:</label>
<md-select name="category" required="" ng-model="menu.category" >
<md-option class="choices" value="cat1">Category1</md-option>
<md-option value="cat2">Category2</md-option>
<md-option value="cat3">Category3</md-option>
</md-select>
<div class="errors" ng-messages="myForm.category.$error">
<div ng-message="required">Required</div>
</div>
</md-input-container>
</div>
<div layout="row" class="pull-right">
<md-button class="btn" ng-click="clearValue()">Clear</md-button>
<md-button class="btn" ng-click="menu.updateCart();menu.selectTab(2);">Next</md-button>
</div>
</form>
</div>
</md-content>
</div>
</md-sidenav>
</section>
....
rest of the page
....
</body>
そしてここでは、Seleniumのコードです
ご迷惑をおかけいたします。
いくつかの推奨チェックがあります。 (1)別のブラウザを試してみてください.MSIEドライバは薄れていることが知られています。特にActionsの場合は、Chromeで答えを試してみてください。 (2)サイドナビゲーションを開いてクリックするまでに10秒間待ってください。 (3)デバッグ出力を追加する - sideNavが表示されていますか? (4)閉じるボタンの要素の下にある「」要素をクリックしてみてください。 –