これは、これで簡単なログインボタンをクリックするための私のコードです Website
import Java.util.concurrent.TimeUnit;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;
public class Reports {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("https://platform.drawbrid.ge");
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.findElement(By.xpath(".//*[@id='_loginButton']")).click();
}
}
次のエラーが発生します。
スレッド「メイン」の例外org.openqa.Selenium.ElementNotVisibleException:要素は現在表示されていないため、コマンドの継続時間またはタイムアウトと相互作用しない可能性があります:2.05秒
このページには、指定されたxpathを持つ2つのボタンがあります。最初は表示されません。そのため、ElementNotVisibleExceptionが発生します。
1つは<div class="loginPopup">
2番目(必要なもの)は<div class="page">
したがって、xpathを次のように変更すると、問題が修正されます。
By.xpath("//div[@class='page']//div[@id='_loginButton']")
ページにはid="_loginButton"
を含む3つの要素さえあり、1つだけが表示されます-ログインフォーム内にあるものは、取得できますそれはCSSセレクターによって:
By.cssSelector("form#_loginForm div#_loginButton")
id="_loginButton"
は3回出現しています。
CssSelectorによってid="_loginButton"
の下のclass="signIn"
を使用して、ページ内の正確なボタンを取得しました。
By.cssSelector("div.signIn div#_loginButton")
あなたは試すことができます:
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("your locator value")));
または
wait.until(ExpectedConditions.ElementIsVisible(By.xpath("your locator value")));
public static void Listget (WebDriver driver) throws Exception
{
Thread.sleep(5000);
UtilityMethod.getAppLocaters(driver, "closeicon").click();
Actions action = new Actions(driver);
WebElement we = driver.findElement(By.xpath("//li[@class='parent dropdown aligned-left']"));
Thread.sleep(5000);
action.moveToElement(we).build().perform();
List<WebElement>links = driver.findElements(By.xpath("//span[@class='menu-title']"));
int total_count = links.size();
System.out.println("Total size :=" +total_count);
for(int i=0;i<total_count;i++)
{
WebElement element = links.get(i);
String text = element.getAttribute("innerHTML");
System.out.println("linksnameis:=" +text);
try{
File src = new File("D:ReadFile.xlsx");
FileInputStream fis = new FileInputStream(src);
XSSFWorkbook wb=new XSSFWorkbook(fis);
XSSFSheet sh = wb.getSheetAt(0);
sh.createRow(i).createCell(1).setCellValue(text);
FileOutputStream fos = new FileOutputStream(new File("D:/ReadFile.xlsx"));
wb.write(fos);
fos.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
}
ウィンドウがremote server
は十分に大きいので、スペースの制約のために要素は非表示になりません。
これは私のために働きました:(私はc#
)
driver.Manage().Window.Size = new System.Drawing.Size(1928, 1060);
Webdriver
は、同じロケーターを持つ要素が複数あり、ElementNotVisible
がロケーターに一致する要素の1つをすでに操作している場合に、Webdriver
例外をスローすることがあります。
このようなシナリオでは、最初に要素のサイズを取得できます
int var_ele_size= driver.findElements(By.xpath("locator")).size();
そしてリストから最初の要素を取り、要素をクリックします。
driver.findElements(By.xpath("locator")).get(var_ele_size-1).click();