Невозможно нажать кнопки «Применить» и «Заинтересовано» на страницах вакансий Nokri.com; Оверлей чат-бота не отображаетсJAVA

Программисты JAVA общаются здесь
Anonymous
Невозможно нажать кнопки «Применить» и «Заинтересовано» на страницах вакансий Nokri.com; Оверлей чат-бота не отображаетс

Сообщение Anonymous »

Я автоматизирую заявки на работу на Naukri.com с помощью Selenium WebDriver на Java.
Мой код успешно переходит на страницу вакансии и открывает сведения о вакансии, но я не могу нажать кнопки «Применить» или «Заинтересовано». Кнопки существуют на странице, но Selenium выдает ElementNotInteractableException или щелчок ничего не делает.
Я пробовал следующее:
  • Использование WebDriverWait и ExpectedConditions.elementToBeClickable.
  • Прокрутка элемента в поле зрения с помощью JavascriptExecutor.
  • Использование класса Actions для перехода к элементу.
  • Нажатие с помощью JavaScript: js.executeScript("arguments[0].click();", element);
Вот соответствующий фрагмент:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement applyBtn = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[contains(text(),'Apply')]")));
((JavascriptExecutor) driver).executeScript("arguments[0].click();", applyBtn);

Иногда появляется наложение чат-бота, которое может блокировать кнопку. Я не уверен, как с этим надежно справиться.
Вопрос:

Как я могу надежно нажимать кнопки «Применить» или «Заинтересован» на страницах вакансий Naukri.com с использованием Selenium Java, даже если появляются наложения, такие как чат-боты?
package nokrijob;

import java.time.Duration;
import java.util.List;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;
import base.BaseTest;
import publicMethod.PublicMethod;

public class Nokri extends BaseTest {

Actions action;

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));

// XPath for pagination "Next" button
static String nextPagi = "//span[text()='Next']/parent::a";

// Scroll entire page to bottom
public void scrollToBottom(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
}

// Scroll specific element to center of screen
public void scrollToElement(WebElement element) {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView({block:'center'});", element);
}

@Test
public void nokri() throws Throwable {

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

// STEP 1: OPEN NAUKRI WEBSITE
driver.get("https://www.naukri.com/");
System.out.println("Naukri launched: " + driver.getCurrentUrl());

// STEP 2: LOGIN
String loginBtn = "//a[text()='Login']";
PublicMethod.click(driver, loginBtn);

WebElement email = wait.until(ExpectedConditions.visibilityOfElementLocated(
By.xpath("//label[text()='Email ID / Username']/following-sibling::input")));
email.sendKeys("shivamparashar1213@gmail.com");

WebElement pass = driver.findElement(By.xpath("//label[text()='Password']/following-sibling::input"));
pass.sendKeys("shivam1213");

driver.findElement(By.xpath("//button[text()='Login']")).click();
Thread.sleep(3000);
System.out.println("Login successful");

// STEP 3: SEARCH JOB
String searchBox = "//span[text()='Search jobs here']/following-sibling::button";
PublicMethod.click(driver, searchBox);

WebElement keyword = wait.until(ExpectedConditions.visibilityOfElementLocated(
By.xpath("//input[@placeholder='Enter keyword / designation / companies']")));
keyword.sendKeys("Automation Testing, Automation Tester, QA Automation, Selenium");

driver.findElement(By.xpath("//span[text()='Search']//ancestor::button")).click();

// STEP 4: EXPERIENCE SLIDER
String slider = "//div[@class='slider-Container']//div[contains(@class, 'handle')]";
PublicMethod.waitForElementVisible(driver, slider);
PublicMethod.handleSlider(driver, slider, -182);
Thread.sleep(2000);

// STEP 5: FRESHNESS FILTER
String jobTime = "//span[text()='Freshness']/parent::div/following-sibling::div//button";
WebElement latest = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(jobTime)));
latest.click();
WebElement last7days = wait
.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Last 7 days']/parent::a")));
last7days.click();
System.out.println("Filter applied: Last 7 days");

// STEP 6: SORT BY DATE
Thread.sleep(3000);
String date = "//button[@id='filter-sort' or @title='Recommended']";
WebElement sortBtn = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(date)));
sortBtn.click();
Thread.sleep(2000);
PublicMethod.getScreenshot(driver);
WebElement sortDate = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//li[@title='Date']/a")));
sortDate.click();
System.out.println("Sorted by Date");

// STEP 7: STORE PARENT WINDOW
String parentWindow = driver.getWindowHandle();
System.out.println("Parent Window: " + parentWindow);
Thread.sleep(4000);

// STEP 8: TOTAL PAGES
String lastPage = "(//div[@align='center']//a)[last()]";
int countPageN = Integer.valueOf(driver.findElement(By.xpath(lastPage)).getText());

// STEP 9: PAGINATION LOOP
for (int i = 0; i < countPageN; i++) {
System.out.println("=========== Page: " + (i + 1) + " ==========");

String jobXpath = "//div[@class='srp-jobtuple-wrapper']//div[contains(@class,'row1')]//a";
List jobs = driver.findElements(By.xpath(jobXpath));
int jobCount = jobs.size();
System.out.println("Total jobs: " + jobCount);

// STEP 10: LOOP THROUGH JOBS
for (int j = 1; j

Вернуться в «JAVA»