2016-01-17 2 views
0

Возникла проблема: Я пытаюсь щелкнуть webdriver до флажка. Во-первых, я попытался щелкнуть, используя xpath, cssSelector, имя класса и т. Д. Я получил пути с firebug, но компилятор жалуется. В нем нет такого элемента. Поэтому я пытаюсь решить проблему по-разному. Когда я отправляю два раза Tab Key, мой выбор появляется на флажке. Без использования клавиши ввода или пробела, как нажать на нее. (Я пытаюсь обработать с помощью Google Recaptcha, поэтому, если я использую пробел или вводя ключи, он обнаруживает, что я - машина.) Вот часть из моего кода JavaНажмите, чтобы выбрать CheckBox

Actions action = new Actions(driver); 
    action.sendKeys(Keys.TAB).build().perform(); 
    Thread.sleep(1000); 
    action.sendKeys(Keys.TAB).build().perform(); 
    Thread.sleep(1000); 
    System.out.println("Tabbed"); 
    action.click().build().perform();//Try to click on checkbox but it clicks on somewhere space. 

Я жду ваших помощи. Спасибо

ответ

2

Перед тем, как выполнить «щелчок», вам нужно переместить курсор мыши на место элемента. Кроме того, это может помочь, если вы подождете, пока элемент станет видимым.

WebElement element = driver.findElement(By.cssSelector("...")); 
WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(ExpectedConditions.visibilityOf(element)); //wait until the element is visible 

action.moveToElement(element).click().perform(); 

Если вы абсолютно хотите, чтобы избежать обнаружения элементов с помощью CSS/XPath, вам нужно будет узнать координаты элемента. Вставьте следующий скрипт в ваш хром/Firefox консоли и нажмите клавишу ВВОД:

document.onclick = function(e) 
{ 
    x = e.pageX; 
    y = e.pageY + 75; // navigation bar offset, you may need to change this value 
    console.log("clicked at position (x, y) " + x + ", " + y); 
}; 

Теперь вы можете нажать на флажок на вашем сайте, и позиция будет печататься в консоли. Полученная позиция может быть использована с помощью класса Robot:

Robot robot = new Robot(); //java.awt.Robot 
robot.mouseMove(x, y); // moves your cursor to the supplied absolute position on the screen 
robot.mousePress(InputEvent.BUTTON1_MASK); //execute mouse click 
robot.mouseRelease(InputEvent.BUTTON1_MASK); //java.awt.event.InputEvent 

Обратите внимание, что это будет действительно переместить курсор в абсолютных координатах. Это означает, что это будет проблематично, если разрешение изменится или вам нужно перейти к элементу. Вы также должны максимизировать браузер при получении координат и использовании WebDriver (driver.manage().window().maximize()), иначе координаты не совпадут.

+0

На самом деле это не отвечает на мой вопрос, потому что нет xpath, cssSelector и т. Д. Я пытаюсь справиться с ним, не используя WebElement. – phantom

+0

Я обновил свой ответ, теперь он не использует API WebElement. Это усложняет ситуацию. Есть ли причина, по которой вы хотите избежать ее использования? – Cyril

+0

Вау! Раньше я этого не делал. На самом деле я не могу справиться с таким исключением элементов за несколько дней. И я попытался сделать это по-другому. То, чего я ожидаю. Большое спасибо! – phantom

Смежные вопросы