如何让Selenium webdriver读取csv文件以执行操作。我有我的脚本加载它在浏览器中,并执行一个操作如何让它读取CSV文件,并用csv文件中的数据替换该操作如何让Selenium webdriver读取csv文件以执行操作
回答
这样做的最好方法是使用另一个库专门研究这种解析,并将其馈入内存。一个好的StackOverflow关于这个问题是here。
请记住,WebDriver只是简单地与浏览器交互。这就是你写作IO的语言。我建议创建一个CSV类。由于csv只是一个文本文件,因此您可以将其作为字符串读取并遍历每行。用逗号分开,你很好走。你没有指定一种语言,所以这里是我们库中C#的例子。注意我使用收益来提高效率。这是我在某处找到的东西。没有必要重新发明轮子。
public static class CSV
{
private static bool ignoreFirstLineDefault = false;
public static IEnumerable<IList<string>> FromFile(string fileName)
{
foreach (IList<string> item in FromFile(fileName, ignoreFirstLineDefault)) yield return item;
}
public static IEnumerable<IList<string>> FromFile(string fileName, bool ignoreFirstLine)
{
using (StreamReader rdr = new StreamReader(fileName))
{
foreach (IList<string> item in FromReader(rdr, ignoreFirstLine)) yield return item;
}
}
public static IEnumerable<IList<string>> FromStream(Stream csv)
{
foreach (IList<string> item in FromStream(csv, ignoreFirstLineDefault)) yield return item;
}
public static IEnumerable<IList<string>> FromStream(Stream csv, bool ignoreFirstLine)
{
using (var rdr = new StreamReader(csv))
{
foreach (IList<string> item in FromReader(rdr, ignoreFirstLine)) yield return item;
}
}
public static IEnumerable<IList<string>> FromReader(TextReader csv)
{
//Probably should have used TextReader instead of StreamReader
foreach (IList<string> item in FromReader(csv, ignoreFirstLineDefault)) yield return item;
}
public static IEnumerable<IList<string>> FromReader(TextReader csv, bool ignoreFirstLine)
{
if (ignoreFirstLine) csv.ReadLine();
IList<string> result = new List<string>();
StringBuilder curValue = new StringBuilder();
char c;
c = (char)csv.Read();
while (csv.Peek() != -1)
{
switch (c)
{
case ',': //empty field
result.Add("");
c = (char)csv.Read();
break;
case '"': //qualified text
case '\'':
char q = c;
c = (char)csv.Read();
bool inQuotes = true;
while (inQuotes && csv.Peek() != -1)
{
if (c == q)
{
c = (char)csv.Read();
if (c != q)
inQuotes = false;
}
if (inQuotes)
{
curValue.Append(c);
c = (char)csv.Read();
}
}
result.Add(curValue.ToString());
curValue = new StringBuilder();
if (c == ',') c = (char)csv.Read(); // either ',', newline, or endofstream
break;
case '\n': //end of the record
case '\r':
//potential bug here depending on what your line breaks look like
if (result.Count > 0) // don't return empty records
{
yield return result;
result = new List<string>();
}
c = (char)csv.Read();
break;
default: //normal unqualified text
while (c != ',' && c != '\r' && c != '\n' && csv.Peek() != -1)
{
curValue.Append(c);
c = (char)csv.Read();
}
result.Add(curValue.ToString());
curValue = new StringBuilder();
if (c == ',') c = (char)csv.Read(); //either ',', newline, or endofstream
break;
}
}
if (curValue.Length > 0) //potential bug: I don't want to skip on a empty column in the last record if a caller really expects it to be there
result.Add(curValue.ToString());
if (result.Count > 0)
yield return result;
}
}
请指明你在哪找到它。来源是关键。 – Arran
我知道。由于作者花时间考虑引用的逗号,我希望我记得我在哪里找到该解析器。无论如何,即使整个代码并不是我全部做的,我还是认为我会发布最后一堂课。 –
我建议你使用Excel文件而不是csv。在使用CSV时的限制是当你想在数据本身中使用分隔符','时,例如如果你有一个地址字段说Gyandeep Colony, B. No : - 1/5
在这里','让你的代码破坏。
我做的读取数据的方法是使用我的工具代码
public class ExcelHandler {
public static String getSheetData(String path,String sheetName, int col , int row) {
Workbook workbook;
String data = null;
try {
workbook = Workbook.getWorkbook(new File(path));
Sheet sheet = workbook.getSheet(sheetName);
data = sheet.getCell(row,col).getContents();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
public static String getSheetData(String path, int sheetNo, int col , int row) {
Workbook workbook;
String data = null;
try {
workbook = Workbook.getWorkbook(new File(path));
Sheet sheet = workbook.getSheet(sheetNo);
data = sheet.getCell(row,col).getContents();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
}
我只是把这些方法无论我想在我的代码。
让我们编码:)
FileInputStream file = new FileInputStream(new File("C:\\testdata.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(file);
HSSFSheet sheet = workbook.getSheetAt(0);
for (int i=1; i <= sheet.getLastRowNum(); i++){
String keyword = sheet.getRow(i).getCell(0).getStringCellValue();
searchbox.sendKeys(keyword);
searchbox.submit();
driver.manage().timeouts().implicitlyWait(10000, TimeUnit.MILLISECONDS);
}
workbook.close();
file.close();
- 1. 如果符合条件,使用Selenium Webdriver执行操作
- 2. 如何根据Selenium Webdriver的div内容执行操作?
- 3. 如何使用Selenium webdriver执行Control + Save操作?
- 4. Selenium - webdriver可以找到元素,但不执行点击操作
- 5. Oracle如何执行读取操作?
- 6. 如何让节点同时执行读取操作?
- 7. C++读取csv文件;让每行
- 8. 如何调试Selenium WebDriver操作?
- 9. Selenium:如何从任何文件(文本,excel或csv)读取值?
- 10. 如何让PHP读取5行而不是整个.csv文件?
- 11. 如何使用C#中的selenium webdriver执行本地javascript文件
- 12. 逐行读取文件并在bash中执行每个操作
- 13. 读取csv数据到数组并执行操作
- 14. 如何读取CSV文件?
- 15. 如何读取CSV文件?
- 16. 如何读取csv文件
- 17. Selenium Webdriver Java:无法通过Chrome中的操作执行点击操作
- 18. R + Hadoop:如何从HDFS读取CSV文件并执行mapreduce?
- 19. 逐行读取csv文件
- 20. 如何让CSV阅读器读取内存文件?
- 21. 使用Selenium Webdriver执行JavaScript
- 22. 执行'.hover'Javascript在Selenium WebDriver
- 23. 如何让vba执行此操作?
- 24. 如何浏览.csv文件以使用python对其执行操作?
- 25. 如何从Selenium webdriver获取只读文本的文本java
- 26. perl +读取多个csv文件+操作文件+提供output_files
- 27. 从文件中连续读取并执行操作
- 28. 从读和操作.csv文件
- 29. 从文件读取并执行按位操作的C++程序
- 30. 如何在eclipse中执行Selenium Webdriver测试作为TestNG
你能后的脚本示例
快乐? SO不是一个完整教程的地方 - 更多的资源可以帮助你解决你的问题。 – vroomfondel
硒与硒无关。 Selenium不解析CSV文件。你编码的语言具有这种能力。 – Arran