【问题标题】:Selenium: Unable to upload files using for loop in SeleniumSelenium:无法在 Selenium 中使用 for 循环上传文件
【发布时间】:2018-02-11 07:47:01
【问题描述】:

我想在网站上上传图片,我正在使用XPath 来做。使用我尝试过的for循环,循环执行了,但没有执行任何操作。

请在下面找到我的代码:

WebDriver driver=new FirefoxDriver( );
driver.get("https://www.netmeds.com/");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.xpath(".//*[@id='carousel-header']/div[1]/div/div[1]/div[3]/div/div[3]/button")).click();

for (int i=1;i<5;i++) {

    driver.findElement(By.xpath(".//*[@id='lbl"+i+"']")).sendKeys("C:\\Users\\sys\\Downloads\\1.png");
    System.out.println("upload");
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

}

【问题讨论】:

    标签: java selenium xpath file-upload


    【解决方案1】:

    第 1 点 - 实际上您正在对错误的元素(即标签)执行 sendkeys()。它应该是带有type=file&lt;input&gt; 标签,那么只有您才能使用sendkeys() 方法上传文件

    第 2 点 - 无需提及ImplicitWait 不止一处。如果您在某个地方提到它,例如在 get(URL) 之后,它适用于整个脚本。仍然如果您需要等待,请使用ExplicitWait

    无论如何,使用下面的代码来做你需要的事情:

    import java.util.concurrent.TimeUnit;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class Test {
    
        public static WebDriver driver;
    
        public static void main(String[] args) throws InterruptedException 
        {
    
            System.setProperty("webdriver.chrome.driver","Resources/chromedriver.exe"); 
            driver = new ChromeDriver();    
            driver.manage().window().maximize();
            driver.get("https://www.netmeds.com");
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    
            driver.findElement(By.xpath("//button[@title='Upload Prescription']")).click();
            for(int i=1;i<5;i++)
            {
                driver.findElement(By.xpath("//input[@id='FileUpload"+i+"']")).sendKeys("C:\\LICENCE.jpg");         
                new WebDriverWait(driver, 60).until(ExpectedConditions.invisibilityOf(driver.findElement(By.id("loaderContainer"))));
                System.out.println("File Upload "+ i + "Done");
            }
    
        }
    }
    

    我已经测试过了,我可以上传所有 4 张图片。如果您对此有任何问题,请告诉我:)

    【讨论】:

    • 无法使用标签 xpath 执行 sendkeys 操作
    • @iamsankalp89,一般情况下您可以在文本框中输入文本而不是在标签中输入文本吗?
    • 您的第三行显示错误“对于 ExpectedConditions 类型的方法 invisibilityOf(WebElement) 未定义”以及等待中的 loaderContainer
    • 导入这个包import org.openqa.selenium.support.ui.ExpectedConditions;
    • 已经导入了这个import org.openqa.selenium.support.ui.ExpectedConditions;
    【解决方案2】:

    在 for 循环中试试这个代码:

    for(int i = 1; i < 5; i++){
                driver.findElement(By.xpath("//input[@id='FileUpload" + i + "']")).sendKeys("C:\\a.jpg");
                driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
                System.out.println("File Upload "+ i + "successfully");
            }
    

    它对我有用:)

    第二个我可以使用webDriverwait

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多