如何用硒打开页脚中的链接

How to open links in footer with selenium

我是 Selenium 的新手,目前正在学习。我正在尝试在 selenium 中打开页脚链接,但它在 https://byjus.com/ or https://www.amazon.in 上不起作用 我已经尝试使用 Action class 以及 Javascript 将元素滚动到视图中。有人可以帮我实现它吗?提前致谢。

package WebApps;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class mmt {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "D:\Nav QA Workspace\Browser Drivers\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        driver.get("https://byjus.com/");
        WebElement footerDriver = driver.findElement(By.xpath("//div[@class='universal-footer']"));
        WebElement links = footerDriver.findElement(By.xpath("//div/div/div/div/div[1]/ul"));
        System.out.println(links.findElements(By.tagName("a")).size());

        for (int i = 0; i < 5; i++) {
            String linksToOpen = Keys.chord(Keys.CONTROL, Keys.ENTER);
            System.out.println(links.findElements(By.tagName("a")).get(i).getText());
//          System.out.println(links.findElements(By.tagName("li")).get(i).getText());
//          links.findElements(By.tagName("a")).get(i).sendKeys(linksToOpen);
        }

        /*
         * Amazon.in facing problem here too
         * 
         * 
         * System.setProperty("webdriver.chrome.driver",
         * "D:\Nav QA Workspace\Browser Drivers\chromedriver.exe"); WebDriver driver
         * = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(15,
         * TimeUnit.SECONDS); driver.get("https://www.amazon.in/"); //
         * div.makeFlex.appendBottom40.footerLinks WebElement footerDriver =
         * driver.findElement(By.cssSelector(
         * "div.navFooterVerticalColumn.navAccessibility"));
         * System.out.println(footerDriver.isDisplayed()); WebElement links =
         * footerDriver.findElement(By.xpath("//div/div[1]/ul"));
         * System.out.println(links.findElements(By.tagName("a")).size());
         * 
         * for(int i=0;i<links.findElements(By.tagName("a")).size();i++) { String
         * linksToOpen = Keys.chord(Keys.CONTROL,Keys.ENTER);
         * System.out.println(links.findElements(By.tagName("a")).get(i).isEnabled());
         * System.out.println(links.findElements(By.tagName("li")).get(i).getText()); //
         * links.findElements(By.tagName("a")).get(i).sendKeys(linksToOpen); }
         */

    }
}

迭代这个xpath绰绰有余"//div[@class='row footer-align footer-mobile-res']//div[1]//ul[1]//a"

我已经通过 WATIR 完成了,你可以在 Java Selenium

中做同样的事情
require 'watir'
b=Watir::Browser.new

b.goto 'https://byjus.com/'
b.elements(xpath: "//div[@class='row footer-align footer-mobile-res']//div[1]//ul[1]//a").each do |a|
  p a.text
end

如果您想单击这些链接并在另一个选项卡中打开,那么

b.elements(xpath: "//div[@class='row footer-align footer-mobile-res']//div[1]//ul[1]//a").each do |a|
  a.click(:control, :enter)
end

输出

"CBSE"
"ICSE"
"CAT"
"IAS"
"JEE"
"NEET"
"Commerce"
"JEE Main"
"NCERT"
"JEE Advanced"
"IAS Coaching"
"CBSE Sample Papers"
"CBSE Question Papers"

我使用不同的定位器类型 XPath 进行了测试。它完全可以正常工作,没有任何错误。您会尝试使用 XPath 而不是 CSS 单击吗?

driver.get("https://www.amazon.in/");
WebElement footerDriver = driver.findElement(By.xpath("//div[@class='navFooterVerticalRow navAccessibility']"));
footerDriver.findElement(By.xpath(".//a[text()='About Us']")).click();

我尝试了 Byju 网站上的“联系我们”按钮,它对我有用。您需要向下滚动 到该元素,然后单击 它们。

By contactUsLink = By.xpath("//a[text()='Contact Us']");
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView(true);", 
driver.findElement(contactUsLink));
log.info("Scrolling down");
driver.findElement(contactUsLink).click();

谢谢大家的回答。我错误地穿越到了 child。这是我的做法,我仅使用 CSS 选择器从 parent 遍历到 child 并且它起作用了。我发布代码是为了帮助某人。

package WebApps;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class mmt {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "D:\QA Workspace\Browser Drivers\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        driver.get("https://byjus.com/");
        WebElement footerDriver = driver
                .findElement(By.cssSelector("div[class='row footer-align footer-mobile-res']" + "> div:nth-child(1)")); 
                                                                                                                        
                                                                                                                        
        footerDriver.findElement(By.xpath("//div[1]/ul[1]"));
        int links = footerDriver.findElements(By.tagName("a")).size();

        for (int i = 0; i < links; i++) {
            String linksToOpen = Keys.chord(Keys.CONTROL, Keys.ENTER); //
            System.out.println(footerDriver.findElements(By.tagName("a")).get(i).getText()); // //
            System.out.println(footerDriver.findElements(By.tagName("li")).get(i).getText()); //
            footerDriver.findElements(By.tagName("a")).get(i).sendKeys(linksToOpen);
        }

//        Amazon.in facing problem here too

        System.setProperty("webdriver.chrome.driver", "D:\QA Workspace\Browser Drivers\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        driver.get("https://www.amazon.in/");
//        div.makeFlex.appendBottom40.footerLinks 
        WebElement footerDriver = driver
                .findElement(By.cssSelector("div[class='navFooterVerticalRow navAccessibility'] > div:nth-child(1)"));
        int links = footerDriver.findElements(By.tagName("a")).size();
//        
        for (int i = 0; i < links; i++) {
            String linksToOpen = Keys.chord(Keys.CONTROL, Keys.ENTER);
            footerDriver.findElements(By.tagName("a")).get(i).sendKeys(linksToOpen);
        }

    }
}