Я пытаюсь получить доступ к WebElement
на веб-сайте после нажатия на предыдущий HTML-элемент. Когда вы загрузите веб-сайт, вы увидите сетку объектов (которые для контекста этого вопроса давайте назовем их карточками). Если вы осмотрите страницу, прежде чем щелкнуть что-либо, вы увидите, что в разделе body > div.view > section.list.gi
есть несколько элементов div, которые принадлежат классу item.card
. Как вы можете видеть в моем коде ниже, я получаю первый объект карты, который принадлежит этому классу, используя селектор firstCard
. Затем я вызываю метод .click()
, чтобы смоделировать щелчок и ждать несколько секунд. Но после этого у меня возникли проблемы. Я хочу получить доступ к атрибуту base
выбранной карты, который находится внутри тегов "body > div.overlay > div#cards"+base + " > div.one.card"
div. После некоторых поисков я обнаружил, что id
каждого объекта карты внутри div.overlay
(после того, как пользователь нажал на карту при первой загрузке веб-сайта) - это строка cards
+ строка base
, которую вы видитевыше. Теперь строка base
является атрибутом каждого объекта карты (перед тем, как щелкнуть по нему при первой загрузке веб-сайта), поэтому я извлекаю это значение и сохраняю его в поле String base
. Поэтому, когда я пытаюсь получить доступ к атрибуту «base» первой карты после нажатия на ее значок в начале, используя поле dataSelector
, я получаю сообщение об ошибке, что элемент не существует, но значение dataSelector
равноbody > div.overlay > div#cards1018031 > div.one.card
, который выглядит хорошо для меня. Любые идеи о том, почему он не может найти элемент?
myClass.java:
public static void main(String[] args) throws InterruptedException {
String url = "https://dbz.space/cards/"; // The website to read data from
DesiredCapabilities caps = new DesiredCapabilities();
caps.setJavascriptEnabled(true);
caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,"C:/Users/Steli/OneDrive/Documents/PhantomJS/phantomjs-2.1.1-windows/bin/phantomjs.exe");
WebDriver driver = new PhantomJSDriver(caps);
driver.get(url); // Connect to the url
//WebElement button = driver.findElement(new By.ByCssSelector("body > div.view > section.more > div.content > div.btn.mat")); // Get the Show more Button element
String firstCard = "body > div.view > section.list.gi > div.item.card";
WebElement card = driver.findElement(By.cssSelector(firstCard));
String base = card.getAttribute("base");
if(isClickable(card,driver)) {
card.click();
Thread.sleep(5000);
String dataSelector = "body > div.overlay > div#cards"+base + " > div.one.card";// + " > div.one.card > div.common > div.stats > div > div.stat";
System.out.println(dataSelector);
WebElement data = driver.findElement(By.cssSelector(dataSelector));
System.out.println(data.getAttribute("base"));
}
}
PS: метод isClickable()
реализован следующим образом:
private static boolean isClickable(WebElement el, WebDriver driver) {
try{
WebDriverWait wait = new WebDriverWait(driver, 6);
wait.until(ExpectedConditions.elementToBeClickable(el));
//System.out.println("clickable!");
return true;
}
catch (Exception e){
return false;
}
}